class CServerConnection;
class CSoundManager;

namespace Ogre
{
    class Root;
    class RenderWindow;
    class FrameListener;
}

namespace AVUI
{
    class Application;
}

class UIRenderer;

class CNetrekClientApplication
{
public:
    CNetrekClientApplication();
    ~CNetrekClientApplication();
    void Run();

    Ogre::Root* GetRoot() { return m_pRoot; }
    Ogre::RenderWindow* GetRenderWindow() { return m_pWindow; }

    AVUI::Application* GetUIApplication() { return m_pUIApplication; }
    UIRenderer* GetUIRenderer() { return m_pUIRenderer; }
    CSoundManager* GetSoundManager() { return m_pSoundManager; }

private:
    bool Setup();
    void SetupResources();
    bool ConfigureRenderOptions();

    CServerConnection* m_pServerConnection;
    Ogre::Root* m_pRoot;
    Ogre::FrameListener* m_pFrameListener;
    Ogre::RenderWindow* m_pWindow;

    CSoundManager* m_pSoundManager;

    UIRenderer* m_pUIRenderer;
    AVUI::Application* m_pUIApplication;
};

